package Hot100;

/**
 * @author zhangmin
 * @create 2021-12-22 15:51
 */
public class trap42 {

    /**42. 接雨水
     * 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图，计算按此排列的柱子，下雨之后能接多少雨水。
     * 从左到右，找出i前面的最大值，从右到左，找出i后面的最大值
     * 对每个位置，找出左边最大与右边最大中的最小值-height[i]
     * */
    public int trap(int[] height) {
        int n=height.length;
        if (n<=2) return 0;
        int[] leftMax=new int[n];
        int[] rightMax=new int[n];
        leftMax[0]=height[0];rightMax[n-1]=height[n-1];
        for (int i = 1; i < n; i++) {
            leftMax[i]=Math.max(leftMax[i-1],height[i]);
            rightMax[n-i-1]=Math.max(rightMax[n-i],height[n-i-1]);
        }
        int res=0;
        for (int i = 1; i < n-1; i++) {
            int heig=Math.min(leftMax[i],rightMax[i])-height[i];
            res+=Math.max(heig, 0);
        }
        return res;
    }

    public static void main(String[] args) {
        trap42 obj=new trap42();
        int[] height = {0,1,0,2,1,0,1,3,2,1,2,1};
        System.out.println(obj.trap(height));

    }
}
